package com.icedata.sika.bridge

import net.mamoe.mirai.message.data.Image
import net.mamoe.mirai.message.data.Image.Key.queryUrl
import net.mamoe.mirai.utils.ExternalResource.Companion.uploadAsImage
import java.io.File
import java.io.InputStream

/**
 * Sika中的图片消息
 */
class SikaImageMessage(private val miraiImageMessage: Image) : SikaSingleMessage(miraiImageMessage) {

    companion object {
        val JPG = "jpg"
        val PNG = "png"
        val GIF = "gif"

        /**
         * 由于图像信息的特殊特性，必须要指定contact才可以发送图像
         *
         * 并且由于图像是协程上传的，因此无法使用一般的构造方法来构造
         *
         * @param inputStream 图片的输入流
         * @param contact 发送的对象
         * @param imageType 图片文件类型
         */
        @UserSikaAPI
        suspend fun build(inputStream: InputStream, contact: SikaContact, imageType: String): SikaImageMessage {
            return SikaImageMessage(inputStream.uploadAsImage(contact.contact, imageType))
        }

        /**
         * @param file 图片的文件
         * @param contact 发送的对象
         * @param imageType 图片文件类型
         */
        @UserSikaAPI
        suspend fun build(file: File, contact: SikaContact, imageType: String): SikaImageMessage {
            return build(file.inputStream(), contact, imageType)
        }
    }

    /**
     * 获取图像的下载URL
     */
    @MiraiBasedAPI
    suspend fun getUrl(): String {
        return miraiImageMessage.queryUrl()
    }

    override fun contentToString(): String {
        return "[图片]"
    }

    override fun toString(): String {
        return "[Sika:Image]"
    }
}